package com.github.bitsapling.sapling.service;

import com.github.bitsapling.sapling.entity.Torrent;
import com.github.bitsapling.sapling.controller.bo.TorrentUploadBO;
import com.github.bitsapling.sapling.utils.PagedGridResult;
import org.jetbrains.annotations.NotNull;

import java.util.List;

public interface TorrentService {

    public Torrent createOrUpdate(@NotNull Torrent torrent);

    public Torrent getTorrentById(long id);

    public Torrent getTorrentByHash(@NotNull String infoHash);

    public List<Torrent> queryAllReviewed();

    public List<Torrent> queryAllUnreviewed();

    /**
     * 根据类别 ID 获取对应类别的种子列表
     * @param categoryId 类别 ID
     * @return 对应类别的种子列表
     */
    public PagedGridResult getTorrentsByCategoryId(Long categoryId, Integer page, Integer pageSize);

    /**
     * 审核种子
     * @param infoHash 种子的 infoHash
     * @param isApproved 审核结果，0 表示不通过，1 表示通过
     * @return 审核操作是否成功
     */
    public boolean reviewTorrent(String infoHash, int isApproved);

    /**
     * 根据关键词在 tags 和 description 字段进行模糊搜索
     * @param keyword 搜索关键词
     * @return 匹配的种子列表
     */
    List<Torrent> searchTorrents(String keyword);

    /**
     * 应用种子的上传促销策略计算上传偏移量
     * @param torrent 种子对象
     * @param promotionUploadOffset 初始上传偏移量
     * @return 应用策略后的上传偏移量
     */
    public long applyTorrentPromotionUploadOffset(Torrent torrent, long promotionUploadOffset);

    /**
     * 应用种子的下载促销策略计算下载偏移量
     * @param torrent 种子对象
     * @param promotionDownloadOffset 初始下载偏移量
     * @return 应用策略后的下载偏移量
     */
    public long applyTorrentPromotionDownloadOffset(Torrent torrent, long promotionDownloadOffset);

    public boolean deleteTorrent(Torrent torrent);
}